package com.xinxin.intelligenceexam.studyMenu.recyclerViewPull.SimpleAdapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;

import java.util.ArrayList;

/**
 * 对RecyclerView的Adapter进行封装
 * 我们知道，在使用RecyclerView.Adapter的时候，需要重写以下几个方法:
 * <p>
 * ViewHolder onCreateViewHolder(ViewGroup parent, int viewType);
 * void onBindViewHolder(ViewHolder holder, int position);
 * int getItemCount();
 * long getItemId(int position);
 * int getItemViewType(int position);//需要多种类型item的时候使用
 * 其中，getItemCount和getItemId在日常使用中，基本都是一样的，因此可以抽出来；而
 * onCreateViewHolder，只要我们有一个万能的ViewHolder，也可以抽出来；也就是说，在日常使用中，我们真正需要做的只有以下几点：
 * <p>
 * 设置布局文件
 * 绑定数据
 * int getItemViewType(int position);//需要多种类型item的时候使用
 * Created by Administrator on 2016/9/27.
 */
public abstract class MultiTypeAdapter extends RecyclerView.Adapter<ViewHolder> {

    protected String TAG;
    protected Context mContext;
    protected ArrayList mDatas;

    public MultiTypeAdapter(Context mContext, ArrayList mDatas) {
        this.mContext = mContext;
        this.mDatas = mDatas;
        this.TAG = getClass().getSimpleName();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        int layoutId = getLayoutIdByType(viewType);
        return ViewHolder.get(mContext, parent, layoutId);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        onBindViewHolder(holder, getItemViewType(position), mDatas.get(position));
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    /**
     * 子类需实现以下三个方法
     */

    protected abstract int getLayoutIdByType(int viewType);

    @Override
    public abstract int getItemViewType(int position);

    protected abstract void onBindViewHolder(ViewHolder holder, int type, Object data);

}
